﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using LogicaNegocio;
using Entidades;
using AccesoBD;

namespace PresentacionEscritorio
{
    public partial class frmRegistrarProfesional : Form, IOpcion
    {
        private GestorMedicos gm;
        private GestorTiposDocumento gtdoc;
        private GestorSexos gs;
        private GestorEspecialdiad ge;

        private string opElegida;

        private Medico medNuevo;



        public frmRegistrarProfesional()
        {
            InitializeComponent();
        }

        private void frmRegistrarProfesional_Load(object sender, EventArgs e)
        {
            gm = new GestorMedicos();
            gs = new GestorSexos();
            gtdoc = new GestorTiposDocumento();
            ge = new GestorEspecialdiad();
            btnEspecialidadesMédico.Visible = false;
            cargarTipoDocumento();
            cargarSexo();
            cmbSexo.SelectedIndex = -1;
            cmbTipoDoc.SelectedIndex = -1;
            Medicos me = new Medicos();
            txtLegajoMedico.Text = Convert.ToString(me.ObtenerUltimoLegajoMedico());
        }
        //private void cargarEspecialidades()
        //{
        //    List<Especialidad> listaEspecialidades = ge.ObtenerTodos();
        //    cmbEspecialidad.DataSource = listaEspecialidades;
        //    cmbEspecialidad.ValueMember = "CodEspecialidad";
        //    cmbEspecialidad.DisplayMember = "Nombre";
        //}
        private void cargarTipoDocumento()
        {
            List<TipoDocumento> listaTipoDoc = gtdoc.obtenerTipoDocumento();
            cmbTipoDoc.DataSource = listaTipoDoc;
            cmbTipoDoc.ValueMember = "Codigo";
            cmbTipoDoc.DisplayMember = "Nombre";
        }
        private void cargarSexo()
        {
            List<Sexo> listaSexo = gs.obtenerSexos();
            cmbSexo.DataSource = listaSexo;
            cmbSexo.ValueMember = "CodSexo";
            cmbSexo.DisplayMember = "Nombre";
        }

        private bool validarDatos()
        {
            bool res = true;
            string error = "";
            if (string.IsNullOrEmpty(txtApellido.Text))
            {
                error += "El apellido es requerido \r\n";
                res = false;
            }
            if (string.IsNullOrEmpty(txtNombre.Text))
            {
                error += "El nombre es requerido \r\n";
                res = false;
            }
            if (cmbTipoDoc.SelectedValue == null)
            {
                error += "Debe seleccionar tipo de documento\r\n";
                res = false;
            }
            if (string.IsNullOrEmpty(txtNumeroDocumento2.Text))
            {
                error += "El número de documento es requerido\r\n";
                res = false;
            }
            else 
            {
               long nroDoc = 0;
               bool resNroDoc = long.TryParse(txtNumeroDocumento2.Text, out nroDoc);
               if (!resNroDoc)
               {
                   error += "El documento debe ser un valor numérico\r\n";
                   res = false;
               }
            }
            if (cmbSexo.SelectedValue == null)
            {
                error += "El sexo es requerido\r\n";
                res = false;
            }
            if (dtFechaNacimiento.Value == null)
            {
                error += "La fecha de nacimiento es requerida\r\n";
                res = false;
            }
            else
            {
                if (dtFechaNacimiento.Value >= DateTime.Now.Date)
                {
                    res = false;
                    error += "La fecha de nacimiento desde debe ser una fecha igual o menor a la fecha actual\r\n";
                }
            }
            if (string.IsNullOrEmpty(txtCelular.Text))
            {
                error += "El número de celular es requerido\r\n";
                res = false;
            }
            else
            {
                long nroCel = 0;
                bool resNroCel = long.TryParse(txtCelular.Text, out nroCel);
                if (!resNroCel)
                {
                    error += "El celular debe ser un valor numérico\r\n";
                    res = false;
                }
            }
            if (string.IsNullOrEmpty(txtCuil.Text))
            {
                error += "El número de CUIL es requerido\r\n";
                res = false;
            }
            if (string.IsNullOrEmpty(txtMatriculaMedico.Text))
            {
                error += "El número de matrícula es requerido\r\n";
                res = false;
            }
            else
            {
                long nroMat = 0;
                bool resNroMat = long.TryParse(txtMatriculaMedico.Text, out nroMat);
                if (!resNroMat)
                {
                    error += "La matricula debe ser un valor numérico\r\n";
                    res = false;
                }
            }
            if (error != "")
            {
                MessageBox.Show(error, "Aviso", MessageBoxButtons.OK);
            }
            return res;
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            if (validarDatos())
            {
                Medicos me = new Medicos();
                int tipoDoc = Convert.ToInt32(cmbTipoDoc.SelectedValue.ToString());
                long nroDoc = long.Parse(txtNumeroDocumento2.Text);
                if (me.nroDocExistente(tipoDoc, nroDoc) == false)
                {
                    medNuevo = new Medico();
                    Sexo sexoSeleccionado;
                    TipoDocumento tipoDocSeleccionado = null;


                    medNuevo.Apellido = txtApellido.Text;
                    medNuevo.Nombre = txtNombre.Text;
                    medNuevo.NroDocumento = Convert.ToInt64(txtNumeroDocumento2.Text);
                    medNuevo.FechaNacimiento = Convert.ToDateTime(dtFechaNacimiento.Value);
                    if (!string.IsNullOrEmpty(txtTelefono.Text))    //telefono
                        medNuevo.Telefono = Convert.ToInt64(txtTelefono.Text);
                    medNuevo.Celular = Convert.ToInt64(txtCelular.Text);
                    if (!string.IsNullOrEmpty(txtCorreoElectrónico.Text))  //mail
                        medNuevo.Mail = txtCorreoElectrónico.Text;
                    if (cmbTipoDoc.SelectedItem != null)   //tipoDocumento
                    {
                        tipoDocSeleccionado = (TipoDocumento)cmbTipoDoc.SelectedItem;
                        medNuevo.TipoDocumento = tipoDocSeleccionado;
                        medNuevo.CodTipoDoc = (int)cmbTipoDoc.SelectedValue;
                    }
                    if (cmbSexo.SelectedItem != null)   //sexo
                    {
                        sexoSeleccionado = (Sexo)cmbSexo.SelectedItem;
                        medNuevo.Sexo = sexoSeleccionado;
                        medNuevo.CodSexo = (int)cmbSexo.SelectedValue;
                    }

                    string cuil = txtCuil.Text;
                    string nrocuil = cuil.Replace("-", "");
                    medNuevo.CUIL = long.Parse(nrocuil);
                    medNuevo.NroMatricula = long.Parse(txtMatriculaMedico.Text);

                    //cargamos las fechas de alta y de baja y lo cargamos a la DB
                    medNuevo.FechaAlta = DateTime.Now;
                    medNuevo.FechaBaja = null;

                    GestorMedicos gm = new GestorMedicos();
                    long nuevoLegajo = gm.registrarMedico(medNuevo);  //me retorna el legajo del medico recien cargado
                    if (nuevoLegajo > 0)
                    {
                        btnEspecialidadesMédico.Visible = true;
                        medNuevo.Legajo = nuevoLegajo;  //asignamos legajo a medico
                        DialogResult dialog = MessageBox.Show("Se cargo exitosamente el medico \r\n Desea asignarle especialidades?", "Registro exitoso", MessageBoxButtons.OKCancel);
                        if (dialog == DialogResult.OK)
                        {
                            frmRegistrarEspecialidadPorMedico formEspXMed = new frmRegistrarEspecialidadPorMedico();
                            formEspXMed.MiMedicoRecibido = medNuevo;  //pasamos el medico al formRegEspXMed
                            formEspXMed.setOpcion(Opcion.OpRegistrar);
                            formEspXMed.Show();
                        }
                        else
                        {
                            limpiar();
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Ya existe un Profesional registrado con este número de documento", "Aviso", MessageBoxButtons.OK);
                    limpiar();
                }
            }
        }

        private void btnTomarFoto_Click(object sender, EventArgs e)
        {
            frmTomarFoto formTomarFoto = new frmTomarFoto();
            formTomarFoto.setFormProfesional(this);
            formTomarFoto.Show();
            
        }
        public void cargarFoto(string rutaFoto)
        {
            string pathFoto = rutaFoto;
            if (pathFoto != null)
            {
                pictureBoxTomarFotoPaciente.ImageLocation = pathFoto;
            }
            pictureBoxTomarFotoPaciente.SizeMode = PictureBoxSizeMode.StretchImage;
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }

        public void setOpcion(string op)
        {
            opElegida = op;
        }

        public string getOpcion()
        {
            return opElegida;
        }

        private void btnEspecialidadesMédico_Click(object sender, EventArgs e)
        {
            frmRegistrarEspecialidadPorMedico formEspXMed = new frmRegistrarEspecialidadPorMedico();
            formEspXMed.MiMedicoRecibido = medNuevo;  //pasamos el medico al formRegEspXMed
            formEspXMed.setOpcion(Opcion.OpRegistrar);
            formEspXMed.Show();
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            limpiar();
        }

        private void limpiar()
        {
            btnEspecialidadesMédico.Visible = false;
            txtLegajoMedico.Text = "";
            txtApellido.Text = "";
            txtNombre.Text = "";
            cmbSexo.SelectedIndex = -1;
            cmbTipoDoc.SelectedIndex = -1;
            txtNumeroDocumento2.Text = "";
            txtCuil.Text = "";
            dtFechaNacimiento.Value = DateTime.Now;
            txtTelefono.Text = "";
            txtCelular.Text = "";
            txtCorreoElectrónico.Text = "";
            txtMatriculaMedico.Text = "";
            pictureBoxTomarFotoPaciente.Image = null;
        }

        private void txtNumeroDocumento2_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es un número ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void txtTelefono_KeyUp(object sender, KeyEventArgs e)
        {

        }

        private void txtTelefono_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es un número ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void txtCelular_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es un número ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void txtMatriculaMedico_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es un número ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void txtNombre_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsLetter(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }

            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es una letra ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void txtApellido_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsLetter(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }

            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es una letra ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
    }
}
